package top.i89ck.modules.admin;

import com.jfinal.aop.Inject;
import com.jfinal.core.Controller;
import com.jfinal.core.Path;
import com.jfinal.core.paragetter.Para;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import org.opensource.jfhelper.utils.Ret;
import top.i89ck.common.jqgrid.JqPager;
import top.i89ck.common.jqgrid.PageMode;
import top.i89ck.common.jqgrid.View;
import top.i89ck.common.utils.Const;
import top.i89ck.modules.model.Dict;
import top.i89ck.modules.model.Role;
import top.i89ck.modules.model.User;
import top.i89ck.modules.service.DictService;
import top.i89ck.modules.service.RoleService;
import top.i89ck.modules.service.UserService;
import top.i89ck.modules.utils.Pager;

import java.util.List;

/**
 * 用户管理， 提供用户的基础管理操作， 包括增删改查+用户与账号的绑定 账号跟用户采用绑定的形式进行关联，
 * 保障账号核心功能不变，扩展用户表已实现项目的用户信息扩展
 * 
 * @author Seiya
 *
 */
@Path(value = "/admin/user", viewPath = Const.BASE_PATH + "/user")
public class UserController extends Controller {

	@Inject
	private UserService userService;
	@Inject
	private RoleService roleService;
	@Inject
	private DictService dictService;

	@View(mode = PageMode.GridTable)
	public void index() {}

	/**
	 * 查询系统中用户的功能列表数据
	 * @param pager
	 */
	public JqPager query(@Para("") Pager pager) {
		Page<Record> page = userService.getPage(pager, getKv());
		return new JqPager(page);
	}

	/**
	 * 新增用户信息
	 * 
	 */
	public void add() {
		List<Role> roles = roleService.getAll();
		List<Dict> sexex = dictService.getSubList(top.i89ck.modules.utils.Const.DICT_USER_SEX);
		set("user", new User());
		set("roles", roles);
		set("sexes", sexex);
		render("user_edit.html");
	}

	/**
	 * 保存用户的数据到数据库中。
	 * @param user
	 */
	public Ret save(@Para("") User user) {
		boolean succeed = userService.save(user);
		return succeed ? Ret.ok() : Ret.fail("保存失败，请重新操作");
	}

	/**
	 * 更新用户信息， 打开用户信息的更新页面
	 * @param userId
	 */
	public void update(Long userId) {
		User       user  = userService.findById(userId);
		List<Role> roles = roleService.getAll();
		List<Dict> sexes = dictService.getSubList(top.i89ck.modules.utils.Const.DICT_USER_SEX);
		set("user", user);
		set("roles", roles);
		set("sexes", sexes);
		render("user_edit.html");
	}

}
